import { Tooltip, message } from 'antd';
import { downloadTemplate, getColorTextLoadMap, getFileNameNotType, getTenantID, splitFileUrl, tooltipLength } from '@/utils';
import pageStyles from '@/common/pageLayout.less';
import { getBaseUrl } from '@/services/urlconst';
import MyIcon from '@/components/MyIcon';
import { BJCS, BJKJ, BJXJ, DYLY, GKZB, JZXCS, JZXTP, KJXYCG, YQZB, ZJCG } from './AssetState';
import _ from 'lodash';
import { ILoadMapTypeAll } from '@/common';
import moment from 'moment';

/**统一请求IP*/
export const getRequestIp = () => {
  /**线上服务器*/
  let url = getBaseUrl();
  /**Mock数据*/
  // let url = '/testApi'
  /**郭宇热点 袁振豪服务IP地址*/
  // let url = 'http://192.168.29.20:31019'
  /**袁振豪热点 袁振豪服务IP地址*/
  // let url = 'http://192.168.40.20:31019'
  /**海淀办公室 袁振豪服务IP地址【wifi:zkgl】*/
  // let url = 'http://192.168.1.33:31019'
  /**怀柔实验室 袁振豪服务IP地址【wifi:MAX-191】*/
  // let url = 'http://192.168.153.192:31019'
  return url;
};

/** 排序 */
export const getSorter = (prev: Record<string, any>, next: Record<string, any>): number => (prev > next ? 1 : -1);

/** columns内容渲染的方法【文本】ColumnsRenderFun({ text }) */
export const ColumnsRenderFun = ({ text, isTooltip = false, textStyle = {}, event = undefined, record = {}, wordNum = 50 }: Record<string, any>) => {
  return (
    <>
      <Tooltip title={isTooltip ? tooltipLength(text, wordNum) : undefined}>
        <span className={pageStyles['over-flow-hidden']} onClick={event ? () => event(record) : undefined} style={textStyle}>
          {text == null || text == undefined || text == '' ? '--' : text}
        </span>
      </Tooltip>
    </>
  );
};

/** columns内容渲染的方法【字典】DictionaryRenderFun({ text }) */
export const DictionaryRenderFun = ({
  text,
  isTooltip = false,
  textStyle = {},
  event = undefined,
  record = {},
  wordNum = 50,
  isState = false,
}: Record<string, any>) => {
  const { colorText, color } = getColorTextLoadMap(text);
  return (
    <>
      <Tooltip title={isTooltip ? tooltipLength(text, wordNum) : undefined}>
        <span
          className={pageStyles['over-flow-hidden']}
          onClick={event ? () => event(record) : undefined}
          style={{ color: isState ? null : color, ...textStyle }}
        >
          {isState && text ? (
            <>
              <MyIcon type="icon-dian" style={{ color }} />
              &nbsp;
            </>
          ) : (
            <></>
          )}
          {colorText == null || colorText == undefined || colorText == '' ? '--' : colorText}
        </span>
      </Tooltip>
    </>
  );
};

/** 判断值是否有两位小数点，没有则自动补零 */
export const formatDecimal = (val: any) => {
  // 不存在的话就返回'--'
  if (!val) return '0.00';
  // 将输入值转为数字，以确保处理的是数值类型
  const num = Number(val);
  // 如果转换后的数值是NaN，则直接返回原始值
  if (isNaN(num)) return '0.00';
  // 使用toFixed方法确保小数点后有两位，然后再转回字符串
  return num.toFixed(2) + '';
};

/** 判断值是否有四位小数点，没有则自动补零 */
export const formatDecimalFour = (val: any) => {
  // 不存在的话就返回'--'
  if (!val) return '0.0000';
  // 将输入值转为数字，以确保处理的是数值类型
  const num = Number(val);
  // 如果转换后的数值是NaN，则直接返回原始值
  if (isNaN(num)) return '0.0000';
  // 使用toFixed方法确保小数点后有两位，然后再转回字符串
  return num.toFixed(4) + '';
};

/** 专用--处理单位 */
export const getColorTextDoms = (text: any) => {
  if (text) {
    const [colorText, color] = text?.split('||');
    if (colorText?.length == 12) {
      return <span>{'个'}</span>;
    }
    return <span style={{ color: color }}>{colorText || '--'}</span>;
  } else {
    return <span>个</span>;
  }
};

/** 采购多个地方都是单个文件上传，此方法用来展示文件 */
export const renderFileFunc = ({ record, fileName, downloadAddress }) => {
  if (!record?.[fileName]) return '--';
  return (
    <>
      {record?.[fileName] && splitFileUrl(record?.[fileName]).length > 0
        ? splitFileUrl(record?.[fileName])?.map((e, i) => {
            return (
              <Tooltip title={e.attachName} key={new Date().getTime() * 155214525515 + e?.attachName}>
                <a
                  onClick={() => {
                    message.success('下载中，请稍后...');
                    downloadTemplate(downloadAddress, e?.attachName, e?.attachUrl, () => {});
                  }}
                >
                  <MyIcon type="icon-file-text-fill" />
                  &nbsp;
                  {getFileNameNotType(e.attachName, 8)}
                </a>
              </Tooltip>
            );
          })
        : '/'}
    </>
  );
};

/** 判断假值的方法 */
export const isFalsy = (value: any) => {
  if (value === null || value === undefined || value === 0 || value === false) {
    return false;
  } else if (typeof value === 'string' && (value.toLowerCase() === 'null' || isNaN(value as any))) {
    return false;
  } else {
    return true;
  }
};

/** 判断是否需要变更采购方式 */
export const isNeedApplyChange = (oldMethod, newMethod) => {
  if (!oldMethod || !newMethod) return false;

  // let stachSort = {
  //   '5': [`${getTenantID()}${ILoadMapTypeAll?.PURCHASE_METHOD}1012`], // [单一来源]
  //   '4': [`${getTenantID()}${ILoadMapTypeAll?.PURCHASE_METHOD}1011`], // [直接采购]
  //   '3': [`${getTenantID()}${ILoadMapTypeAll?.PURCHASE_METHOD}1008`, `${getTenantID()}${ILoadMapTypeAll?.PURCHASE_METHOD}1009`, `${getTenantID()}${ILoadMapTypeAll?.PURCHASE_METHOD}1010`], // [便捷询价、便捷竞争、便捷框架协议]
  //   '2': [`${getTenantID()}${ILoadMapTypeAll?.PURCHASE_METHOD}1005`, `${getTenantID()}${ILoadMapTypeAll?.PURCHASE_METHOD}1004`, `${getTenantID()}${ILoadMapTypeAll?.PURCHASE_METHOD}1006`, `${getTenantID()}${ILoadMapTypeAll?.PURCHASE_METHOD}1003`], // [竞争性磋商、竞争性谈判、框架协议、邀请招标]
  //   '1': [`${getTenantID()}${ILoadMapTypeAll?.PURCHASE_METHOD}1002`], // [公开招标]
  // }

  let stachSort = {
    '5': [DYLY()], // [单一来源]
    '4': [ZJCG()], // [直接采购]
    '3': [BJXJ(), BJCS(), BJKJ()], // [便捷询价、便捷竞争、便捷框架协议]
    '2': [JZXCS(), JZXTP(), KJXYCG(), YQZB()], // [竞争性磋商、竞争性谈判、框架协议、邀请招标]
    '1': [GKZB()], // [公开招标]
  };

  // 反过来
  // let stachSort = {
  //   '1': [DYLY()], // [单一来源]
  //   '2': [ZJCG()], // [直接采购]
  //   '3': [BJXJ(), BJCS(), BJKJ()], // [便捷询价、便捷竞争、便捷框架协议]
  //   '4': [JZXCS(), JZXTP(), KJXYCG(), YQZB()], // [竞争性磋商、竞争性谈判、框架协议、邀请招标]
  //   '5': [GKZB()], // [公开招标]
  // };

  const sortNum = (state, obj) => {
    let n: any = null;
    for (let k in obj) {
      let isShow = obj[k]?.find((item) => item == state);
      if (isShow) n = k;
    }
    return n;
  };

  const oldMethod_Num = sortNum(oldMethod, stachSort);
  const newMethod_Num = sortNum(newMethod, stachSort);

  /** 同级的话也是不用填写申请单 */
  if (Number(oldMethod_Num) == Number(newMethod_Num)) return false;

  if (Number(oldMethod_Num) > Number(newMethod_Num)) {
    return true;
  } else {
    return false;
  }
};

// 数据根据创建时间排序，时间最早的在第一个
export const sortCreateTimeData = (arr) => {
  if (!arr?.length || !arr) return [];
  // return arr?.sort((a, b) => {
  //   var dateA: any = new Date(a?.createTime);
  //   var dateB: any = new Date(b?.createTime);
  //   return dateA - dateB;
  // });
  arr.sort((a, b) => {
    // 提取packCode中的数字部分，并转换为数字
    const packCodeA = parseInt(a.packCode.match(/\d+/)[0]);
    const packCodeB = parseInt(b.packCode.match(/\d+/)[0]);

    // 比较数字部分并返回比较结果
    return packCodeA - packCodeB;
  });

  return arr;
};

// 在线文件编制中需要将时间拆分
export const extractDateTimeInfo = (dateTimeString, fieldName) => {
  const dateObject = new Date(dateTimeString);
  const year = dateObject.getFullYear().toString().padStart(4, '0');
  const month = (dateObject.getMonth() + 1).toString().padStart(2, '0');
  const day = dateObject.getDate().toString().padStart(2, '0');
  const hour = dateObject.getHours().toString().padStart(2, '0');
  const minute = dateObject.getMinutes().toString().padStart(2, '0');

  const result = {};
  result[`${fieldName}Year`] = year;
  result[`${fieldName}Month`] = month;
  result[`${fieldName}Day`] = day;
  result[`${fieldName}Hour`] = hour;
  result[`${fieldName}Minute`] = minute;

  return result;
};

/**根据0-1返回-是否*/
export const isShowPass = (val: number | string) => {
  val = Number(val);
  if (val) {
    return <span>是</span>;
  } else {
    return <span>否</span>;
  }
};

export const isShowPassText = (val: number | string, arr: string[] = ['是', '否']) => {
  val = Number(val);
  if (val) {
    return arr[0];
  } else {
    return arr[1];
  }
};

// 处理传给ntko插件的数据
export const processingDataFun = (resObj) => {
  let result = _?.cloneDeep(resObj);

  // 过滤调为null或者undefind的值
  for (const key in result) {
    if (result[key] === null || result[key] === undefined) {
      delete result[key];
    }
  }

  // 包名称和包编号
  result.packNames = result?.packName;
  result.packCodes = result?.packCode;

  // 预算金额和最高限价
  result.expectSums = result?.expectSum;
  result.expectCeilSums = result?.expectCeilSum;

  /** <<<================字典处理===============>>> */
  //项目属性
  if (resObj?.supplyType === `${getTenantID()}${ILoadMapTypeAll?.PURCHASE_CATEGORY}1000`) {
    result.supplyType = '货物类';
  } else {
    result.supplyType = '服务类';
  }
  //所属行业
  result.industryKind = getColorTextLoadMap(resObj?.industryKindName)?.colorText;
  // 评标方法
  result.evalStyle =
    resObj?.evalStyle == `${getTenantID()}${ILoadMapTypeAll?.EVALSTYLE_TYPE}1002`
      ? '综合评分法'
      : resObj?.evalStyle == `${getTenantID()}${ILoadMapTypeAll?.EVALSTYLE_TYPE}1003`
      ? '最低评标价法'
      : '综合评分法';
  /** <<<================字典处理===============>>> */

  /** <<<================日期处理===============>>> */
  // 考察时间
  if (resObj.siteVisitTime) {
    result = {
      ...result,
      ...extractDateTimeInfo(moment(resObj.siteVisitTime)?.format('YYYY-MM-DD HH:mm:ss'), 'siteVisitTime'),
    };
  }
  //召开时间
  if (resObj?.meetTime) {
    result = {
      ...result,
      ...extractDateTimeInfo(moment(resObj.meetTime)?.format('YYYY-MM-DD HH:mm:ss'), 'meetTime'),
    };
  }

  result.bidMarginTime = moment(resObj?.bidMarginTime)?.format('YYYY-MM-DD'); //缴纳时间
  /** <<<================日期处理===============>>> */

  /** <<<================是否处理===============>>> */
  result.sciequipFlag = isShowPassText(resObj?.sciequipFlag); //是否科研仪器设备
  result.importFlag = isShowPassText(resObj?.importFlag); //是否接受进口
  result.packFlag = isShowPassText(resObj?.packFlag, ['允许', '不允许']); //是否分包
  result.complexFlag = isShowPassText(resObj?.complexFlag); //是否接受联合体
  result.sampleFlag = isShowPassText(resObj?.sampleFlag, ['需要', '不需要']); //是否需要样品
  result.bidMarginFlag = isShowPassText(resObj?.bidMarginFlag); //履约保证金
  result.sampleCheck = isShowPassText(resObj?.sampleCheck, ['需要', '不需要']); //相关检测报告-样品

  // 是否接受联合体
  result.complexFlags = result?.complexFlag;
  /** <<<================是否处理===============>>> */

  return result;
};
